// HotKeyEdit.cpp : implementation file
//

#include "stdafx.h"
#include "FastTab.h"
#include "HotKeyEdit.h"
#include "HotKeyManager.h"

// HotKeyEdit

IMPLEMENT_DYNAMIC(HotKeyEdit, CEdit)

HotKeyEdit::HotKeyEdit()
{
	mModifier = 0;
	mVKey = 0;
}

HotKeyEdit::~HotKeyEdit()
{
}


BEGIN_MESSAGE_MAP(HotKeyEdit, CEdit)
// 	ON_WM_CHAR()
// 	ON_WM_SYSCHAR()
//  	//ON_WM_KEYDOWN()
//  	ON_WM_SYSKEYDOWN()
END_MESSAGE_MAP()

//  void HotKeyEdit::OnChar( UINT nChar, UINT nRepCnt, UINT nFlags )
//  {
//  	LogDebug(FMTVAR(nChar));
//  }
// 
// void HotKeyEdit::OnKeyDown( UINT nChar, UINT nRepCnt, UINT nFlags )
// {
// 	LogDebug(FMTVAR(nChar));
// }
// 
// BOOL HotKeyEdit::PreTranslateMessage( MSG* pMsg )
// {
// 	if (pMsg->message == WM_KEYDOWN)
// 	{
// 		LogDebug(FMTVAR(pMsg->wParam));
// 		return TRUE;
// 	}
// 	if (pMsg->message == WM_SYSCOMMAND)
// 	{
// 		LogDebug(FMTVAR(pMsg->wParam));
// 		return TRUE;
// 	}
// 	return __super::PreTranslateMessage(pMsg);
// }
// 
//  void HotKeyEdit::OnSysKeyDown( UINT nChar, UINT nRepCnt, UINT nFlags )
//  {
//  	LogDebug(FMTVAR(nChar));
//  
//  }
// 
// LRESULT HotKeyEdit::WindowProc( UINT message, WPARAM wParam, LPARAM lParam )
// {
// 	if (message == WM_KEYDOWN)
// 	{
// 		LogDebug(FMTVAR(wParam));
// 		return TRUE;
// 	}
// 	if (message == WM_SYSCOMMAND)
// 	{
// 		LogDebug(FMTVAR(wParam));
// 		return TRUE;
// 	}
// 	return __super::WindowProc(message, wParam, lParam);
// }

// void HotKeyEdit::OnSysChar( UINT nChar, UINT nRepCnt, UINT nFlags )
// {
// 	LogDebug(FMTVAR(nChar));
// }

bool HotKeyEdit::IsShiftPress()
{
	return HIWORD(GetKeyState(VK_LSHIFT)) ||  HIWORD(GetKeyState(VK_RSHIFT)) ? true : false;
}

bool HotKeyEdit::IsAltPress()
{
	return HIWORD(GetKeyState(VK_LMENU)) || HIWORD(GetKeyState(VK_RMENU)) ? true : false;
}

bool HotKeyEdit::IsCtrlPress()
{
	return HIWORD(GetKeyState(VK_LCONTROL)) || HIWORD(GetKeyState(VK_RCONTROL)) ? true : false;
}


void HotKeyEdit::SetHotKey( WPARAM nChar )
{
	mModifier = 0;
	mVKey = 0;
	CString str;
	bool add = false;
	if (IsCtrlPress())
	{
		str += _T("CTRL");
		mModifier |= MOD_CONTROL;
		add = true;
	}

	if (IsShiftPress())
	{
		if (add)
		{
			str += " + ";
		}
		add = true;
		str += _T("SHIFT");
		mModifier |= MOD_SHIFT;
	}

	if (IsAltPress())
	{
		if (add)
		{
			str += " + ";
		}
		add = true;
		str += _T("ALT");
		mModifier |= MOD_ALT;
	}
// 	if (nChar == VK_SHIFT || nChar == VK_CONTROL || nChar == VK_MENU)
// 	{
// 		return ;
// 	}

	if (nChar == VK_ESCAPE && mModifier == 0)
	{
		SetWindowText(_T(""));
		return ;
	}
	
	CString s = HotKeyManager::Instance()->GetKeyString(nChar);
	if (!s.IsEmpty())
	{
		if (add)
		{
			str += " + ";
		}
		str += s;
		mVKey = nChar;
	}
	this->SetWindowText(str);
}


// HotKeyEdit message handlers


